﻿#-*- coding: utf-8 -*-

class IS_LISTA_AUTOROW:
	def __call__(self, val):
		ss=val.split(', ')
		i=0
		for s in ss:
			if len(s)>5 and s[0].isalpha and s[1]=='.' and s[2]==' ' and s[3:].isalpha():
				ss[i]=s[0].upper()+s[1:3]+s[3].upper()+s[4:]
			else :
				return(val, "Niepoprawny format. Powinno być I. Nazwisko, ... np: K. Kowalski, N. Nowak")
			i=i+1
		val=', '.join(ss)
		return (val, None)
				
db.define_table("rodzaj_czasopisma",
      SQLField("nazwa", "string", length=150, notnull=True, unique=True, required=True)
)

db.define_table("czasopisma",
      SQLField("nazwa", "string", length=100, notnull=True, unique=True, required=True),
      SQLField("id_rodzaj", db.rodzaj_czasopisma, notnull=True),
	  SQLField("punkty", "integer", notnull=True)
)

db.define_table("publikacje",
     SQLField("tytul", "string", length=80, notnull=True, required=True, label='Tytuł', requires=IS_FIRST_UPPER()),
     SQLField("autorzy", "string", length=500, notnull=True, required=True, label='Autor i współautorzy', requires=IS_LISTA_AUTOROW()),
	  SQLField("nazwa_czasopisma", "string", length=120, notnull=True, required=True, label='Nazwa czasopisma', requires=[IS_NOT_EMPTY('Nazwa czasopisma musi być podana'),IS_FIRST_UPPER()]),
	  SQLField("id_rodzaj_czasopisma", db.rodzaj_czasopisma, notnull=True, label='Rodzaj czasopisma'),
	  SQLField("monografia", "boolean", requires=IS_BOOL()),
	  SQLField("nr", "integer", label='Numer'),
	  SQLField("rok", "integer", label='Rok', notnull=True, required=True, requires=IS_INT_IN_RANGE(1000,4000)),
	  SQLField("strony_od", "integer", length=11, notnull=True),
	  SQLField("strony_do", "integer", length=11, notnull=True),
	  SQLField("punkty", "integer", label = 'Punkty', notnull=True, required=True)
)


db.define_table("publikacje_pracownicy",
     SQLField("id_publikacja", db.publikacje, ondelete='CASCADE', notnull=True, required=True, label='Publikacja'), 
     SQLField("id_pracownik", db.pracownicy, ondelete='CASCADE', notnull=True, required=True, label='Pracownik wydziałowy'),
)

def wyznacz_rodzaj_pkt(nazwa):
	czasopisma=db(db.czasopisma.nazwa==nazwa).select()
	if not czasopisma: return nazwa,4,0
	else: return nazwa,czasopisma[0]['id_rodzaj'],czasopisma[0].punkty
	
def dopelniacz_publikacje(request_vars,wpiszdo):
	if 'nazwa_czasopisma' in request_vars:
		(nazwa,rodzaj,pkt)=wyznacz_rodzaj_pkt(request_vars['nazwa_czasopisma'])
		wpiszdo['id_rodzaj_czasopisma']=rodzaj
		wpiszdo['punkty']=pkt
	return request_vars


# publikacje_fields_dodaj=map(lambda f : db.publikacje[f],publikacje_dodaj)

db.publikacje.id_rodzaj_czasopisma.requires=ProfessorsIS_IN_DB(db, 'rodzaj_czasopisma.id', map=wez_nazwa)

db.publikacje_pracownicy.id_pracownik.requires=ProfessorsIS_IN_DB(db, 'pracownicy.id',map=wez_imie_nazwisko)
db.publikacje_pracownicy.id_publikacja.requires=ProfessorsIS_IN_DB(db, 'publikacje.id',map=wez_tytul)
id_map_publikacje={'id_pracownik':wez_imie_nazwisko}
